from rest_framework import serializers

from book.models import BookInfo


class BookModelSerialzier(serializers.ModelSerializer):
    """
        模型类序列化器ModelSerializer可以帮助我们快速创建一个Serializer类
        ModelSerializer和Serializer区别:
        1.基于模型类自动生成一系列序列化器字段
        2.基于模型类自动为Serializer生成validators(验证器),比如unique_together
            如果模型类中指定类唯一值选项参数unique =True,会自动生成唯一值判断方法
        3.模型类序列化器包含默认的create()和update()方法的业务实现
    """

    # 修改字段的选项参数
    # 第一种修改字段选项参数(指明字段)
    btitle = serializers.CharField(max_length=20, min_length=2)

    class Meta:
        """
            model 指明参照哪个模型类
            fields 指明为模型类生成的哪些字段内容
            指定字段:
                1.__all__表名包含所有字段，也可以写明具体哪些字段
                2.使用exclude可以明确排除掉哪些字段,exclude = ('bread',)
                3.显示指明字段
                4.通过read_only_fields指明只读字段,即仅用于序列化输出的字段
        """
        # 指定根据那个模型类生成字段
        model = BookInfo
        # 指定生成的字段内容
        # fields = ('btitle', 'bread', 'bcomment')
        # 生成所有模型类中对应的字段
        fields = '__all__'

        # extra_kwargs参数为ModelSerializer添加或修改原有的选项参数
        # 第二种修改选项参数
        extra_kwargs = {
            "bread": {
                'max_value': 100,
                'min_value': 20
            }
        }

        # 其他属性
        # 指定序列化器字段（取反）和fields属性是相反的,元组中只有一个数据需要加逗号
        # fields 和 exclude 只能二选一
        # exclude = ('bread',)
        # 指定read_only 选项只读字段
        read_only_fields = ('is_delete',)
